/**
 *  typedef用法详解
 *  用typedef可以将已有的数据类型名定义成新的数据类型名，语法格式如下：
 *       typedef <原类型名> <新类型名>;
 *       自定义类型步骤：
 *       先定义一个要定义类型的变量(任意变量名)，然后在前面添加typedef，最后将变量名换成新的类型名。
 *
 *  1. 定义一种类型的别名，而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如：
 *
 *  2.用在旧的C的代码中（具体多旧没有查），帮助struct。以前的代码中，声明struct新对象时，必须要带上struct，即形式为： struct 结构名 对象名，
 *
 *
 *  3.用typedef来定义与平台无关的类型。比如定义一个叫 REAL 的浮点类型，在目标平台一上，让它表示最高精度的类型为：
 *
 *
 *  4. 为复杂的声明定义一个新的简单的别名。方法是：在原来的声明里逐步用别名替换一部分复杂声明，如此循环，把带变量名的部分留到最后替换，得到的就是原声明的最简化版
 *
 *
 *
 *
 *
 */
#include "stdio.h"
typedef int INTEGER;
// 将int类型定义为INTEGER类型，然后定义INTEGER类型变量i
void test1(){
    INTEGER i=6;
    printf("%d,%d \n",i, sizeof(i));
}

// 将结构体struct stu类型定义为StuType类型，然后定义StuType类型变量s
typedef struct stu{
    int xh;
    char xm[20];
    float cj;
} StuType;

void test2(){
    StuType s={5,"张三",99.8};
    printf("%d,%s,%g \n",s.xh,s.xm,s.cj);
}

//自定义4个整型元素的数组类型arr，然后定义arr类型一个变量a和一个数组b(含3个元素)。
void test3(){
    typedef int arr[4];
    arr a={1,2,3,4}; //相当于a[4]={1,2,3,4}
    arr b[3]={1,2,3,4,5,6,7,8,9,10,11,12}; //3行4列，a[3][4]={}
    for(int i=0;i<4;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    for(int i=0;i<3;i++){
        for(int j=0;j<4;j++){
            printf("%4d ",b[i][j]);
        }
        printf("\n");
    }
}



/**
 *  主函数
 * @return
 */
int main30(){
    test1();
    test2();
    test3();
    return 0;
}